# 加上连接循环, 1个服务端服务多个客户端

import socket
import struct

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = "127.0.0.1"
host = 8080
client.connect((ip, host))

# 发、收消息
while True:  # 通信循环
    # 1. 发命令
    cmd = input(f"[{ip}:{host}] >> ").strip()
    if not cmd:  # 客户端能发送空字符串，但是服务端不能接收空字符串
        continue
    if "exit" == cmd:
        break
    client.send(cmd.encode("utf-8"))
    # 2. 获取结果
    # 第一步: 先获取报头
    recv_header = client.recv(4)  # int 有4个字节
    total_size = struct.unpack('i', recv_header)[0]
    # 第二步: 获取数据
    recv_size = 0
    recv_data = b""
    while recv_size < total_size:
        data = client.recv(1024)
        recv_data += data
        recv_size += len(data)
    print(f"recv data : ", end="")
    # windows 使用gbk编码
    print(recv_data.decode("gbk"))
    # linux 使用utf-8编码
    # print(data.decode("utf-8"))

# 4. 关机
client.close()
